﻿
using System.Configuration;
namespace System
{
    public static partial class Utility
    {
        /// <summary>
        /// AppSettings dosyasından ayar parametresi okumak için kullanılan generic bir methoddur.
        /// Default değer olarak geri dönüş tipinin default değerini alır (int için 0, bool için false vs.). 
        /// Ama geri dönüş tipi "string" ise default değer "string.Empty" olarak değiştirilir.
        /// </summary>
        /// <typeparam name="T">Geri dönüş tipi (string, bool, int vs.)</typeparam>
        /// <param name="pKey">appSetting dosyasından okunacak verinin key attribute değeri</param>
        /// <returns></returns>
        public static T ReadAppSetting<T>(this string pKey)
        {
            T defaultValue;
            if (typeof(T) == typeof(String))
                defaultValue = (T)Convert.ChangeType(string.Empty, typeof(T));
            else
                defaultValue = default(T);

            return ReadAppSetting<T>(pKey, defaultValue);
        }

        /// <summary>
        /// AppSettings dosyasından ayar parametresi okumak için kullanılan generic bir methoddur
        /// </summary>
        /// <typeparam name="T">Geri dönüş tipi (string, bool, int vs.)</typeparam>
        /// <param name="pKey">appSetting dosyasından okunacak verinin key attribute değeri</param>
        /// <param name="pDefaultValue">dosyadan okuma yapılamaması durumunda geri dönecek öntanımlı değer</param>
        /// <returns></returns>
        public static T ReadAppSetting<T>(this string pKey, T pDefaultValue)
        {
            if (ConfigurationManager.AppSettings[pKey] != null)
            {
                return (T)Convert.ChangeType(ConfigurationManager.AppSettings[pKey], typeof(T));
            }
            else
            {
                return (T)Convert.ChangeType(pDefaultValue, typeof(T));
            }
        }
    }
}
